package article_api

import (
	"github.com/gin-gonic/gin"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
	"giv-vue-blog/service/es_ser"
	"giv-vue-blog/service/redis_ser"
)

type ArticleDetailRequest struct {
	Title string `json:"title" form:"title"`
}

// ArticleDetail 文章详情 以存储在es中文章的id为条件进行查看该文章的详情
// 访问方式 http://127.0.0.1:8080/api/articles/r3HrK4kB5JjW8a7WHUpE
// ArticleDetail 文章详情接口
// @Summary 获取文章详情
// @Description 根据文章ID获取指定文章的详情信息
// @Tags 文章管理
// @Accept json
// @Produce json
// @Param id path string true "文章ID"
// @Security ApiKeyAuth
// @Success 200 {object} res.Response{}
// @Failure 400 {object} res.Response "参数错误"
// @Failure 401 {object} res.Response "未授权访问"
// @Failure 404 {object} res.Response "文章不存在"
// @Failure 500 {object} res.Response "内部服务器错误"
// @Router /api/articles/{id} [get]
func (ArticleApi) ArticleDetail(c *gin.Context) {
	var cr models.ESIDRequest
	err := c.ShouldBindUri(&cr)
	if err != nil {
		res.FailedWithCode(res.ArgumentError, c)
		return
	}
	redis_ser.NewArticleLook().Set(cr.ID)
	model, err := es_ser.CommonDetail(cr.ID)
	if err != nil {
		global.Log.Error(err.Error())
		res.FailedWithMsg(err.Error(), c)
		return
	}
	res.OkWithData(model, c)
}

// ArticleDetailByTitleView 文章详情接口
// @Summary 获取文章详情
// @Description 根据文章标题关键字获取指定文章的详情信息
// @Tags 文章管理
// @Accept json
// @Produce json
// @Param title query string true "文章标题关键字"
// @Security ApiKeyAuth
// @Success 200 {object} res.Response{}
// @Failure 400 {object} res.Response "参数错误"
// @Failure 401 {object} res.Response "未授权访问"
// @Failure 404 {object} res.Response "文章不存在"
// @Failure 500 {object} res.Response "内部服务器错误"
// @Router /api/article/detail [get]
func (ArticleApi) ArticleDetailByTitleView(c *gin.Context) {
	var cr ArticleDetailRequest
	err := c.ShouldBindQuery(&cr)
	if err != nil {
		res.FailedWithCode(res.ArgumentError, c)
		return
	}
	model, err := es_ser.CommonDetailKeyword(cr.Title)
	if err != nil {
		global.Log.Error(err.Error())
		res.FailedWithMsg(err.Error(), c)
		return
	}
	res.OkWithData(model, c)
}
